﻿using System;
//4.16.3 类型或成员交叉引用
//类型名称和类型或成员交叉引用会被转换为唯一指定这个类型或成员的ID。
//这些名称是由一个定义ID所表示内容的前缀和一个类型或成员的签名组成的。
//这样的成员前缀有：

/*

 XML类型前缀    ID前缀的应用目标
 N              命名空间
 T              类型（类、结构体、枚举、接口、委托）
 F              字段
 P              属性
 M              方法
 E              事件
 !              错误
 
 */

//这些规则描述了如何正确记录所生成的签名，但是是非常复杂的。
//下面是所生成的一个类型和ID示例：
// 命名空间没有独立的签名
namespace NS
{
    /// T:NS.MyClass
    class MyClass
    {
        /// F:NS.MyClass.aField
        string aField;

        /// P:NS.MyClass.aProperty
        short aProperty { get { } set { } }
        
        /// T:NS.MyClass.NestedType
        class NestedType { }
        
        /// M:NS.MyClass.X()
        void X() { }
        
        /// M:NS.MyClass.Y(System.Int32,System.Double@,System.Decimal@)
        void Y(int p1, ref double p2, out decimal p3) { }
        
        /// M:NS.MyClass.Z(System.Char[],System.Single[0:,0:])
        void Z(char[] l, float[,] p2) { }
        
        /// M:NS.MyClass.op_Addition(NS.MyClass,NS.MyClass)
        public static MyClass operator +(MyClass c1, MyClass c2) { }
        
        /// M:NS.MyClass.op_Implicit(NS.MyClass)_System.Int32
        public static implicit operator int(MyClass c) { }
        
        /// M:NS.MyClass.#ctor
        MyClass() { }
        
        /// M:NS.MyClass.Finalize
        ~MyClass() { }
        
        /// M:NS.MyClass.#cctor
        static MyClass() { }
    }
}
